package com.example.mq.mqserver.core;

import lombok.Data;

import java.io.Serializable;
import java.util.UUID;

/*
    表示一个消息
 */
@Data
//要通过网络传输的话，就得将该消息序列化和反序列化，这里不用json格式，json是文本格式，用java自带的接口Serializable，并且不需要重写任何方法
public class Message implements Serializable {
    //消息属性
    private BasicProperties basicProperties = new BasicProperties();
    //消息正文
    private byte[] body;

    //辅助用属性
    //当message需要在文件中储存后（持久化），因为一个文件会储存很多消息，那么该怎么知道它存储的位置呢
    //下面用两个偏移量来确定[beg, end)
    //表示数据的开头距离文件开头的偏移位置
    private transient long offsetbeg;
    //表示数据的结尾距离文件开头的偏移位置
    private transient long offsetend;
    //表示数据是否是有效消息，0x1是，0x0不是（逻辑删除）
    private byte isValid = 0x1;
    //表示创建自带messageid的Message工厂类
    public static Message getMessagewithId(BasicProperties basicProperties, byte[] bytes, String runtingKey){
        Message message = new Message();
        if(basicProperties != null){
            message.setBasicProperties(basicProperties);
        }
        message.setRoutingKey(runtingKey);
        message.body = bytes;
        message.setMessageId("M-" + UUID.randomUUID());
        return message;
    }


    public String getMessageId(){
        return basicProperties.getMessageId();
    }

    public void setMessageId(String id){
        basicProperties.setMessageId(id);
    }

    public int getDelivemode(){
        return basicProperties.getDelivemode();
    }

    public void setDelivemode(int delivemode){
        basicProperties.setDelivemode(delivemode);
    }

    public String getRoutingKey(){
        return basicProperties.getRoutingKey();
    }

    public void setRoutingKey(String routingKey){
        basicProperties.setRoutingKey(routingKey);
    }

}
